/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package edu.upc.wib.controller;

import edu.upc.wib.entity.CriterioBusqueda;
import edu.upc.wib.entity.Torneo;
import edu.upc.wib.service.TorneoService;
import edu.upc.wib.utilitarios.TorneoException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.support.SessionStatus;
import org.springframework.web.servlet.ModelAndView;

/**
 *
 * @author Christopher Garrido
 */
@Controller("torneoController")
public class TorneoController {

    @Autowired
    private TorneoService torneoService;
    private static Logger log = LoggerFactory.getLogger(UsuarioController.class);

    @RequestMapping("/torneos/ConsultarTorneos")
    public ModelAndView torneos() {
        ModelAndView mav = new ModelAndView("torneos/ConsultarTorneos");
        List<Torneo> torneos = torneoService.obtenerTodos();
        CriterioBusqueda criterioBusqueda = new CriterioBusqueda();
        mav.addObject("torneos", torneos);
        mav.addObject("criterioBusqueda", criterioBusqueda);
        return mav;
    }

    @RequestMapping(value = "/torneos/buscar", method = RequestMethod.POST)
    public ModelAndView buscarTorneos(@ModelAttribute("criterioBusqueda") CriterioBusqueda criterioBusqueda, SessionStatus status) {
        ModelAndView mav = new ModelAndView("torneos/ConsultarTorneos");
        try {
            List<Torneo> torneos = torneoService.buscarTorneoPorNombre(criterioBusqueda.getNombre().trim());
            mav.addObject("criterioBusqueda", criterioBusqueda);
            mav.addObject("torneos", torneos);

        } catch (Exception ex) {
            mav.addObject("msg", ex.getMessage());
        }
        return mav;
    }

    @RequestMapping(value = "/torneos/CrearTorneo", method = RequestMethod.GET)
    public ModelAndView newTorneo() {
        ModelAndView mav = new ModelAndView("torneos/CrearTorneo");
        Torneo torneo = new Torneo();
        torneo.setNombre("Reemplace el nombre");
        torneo.setEnlace("http://www.whoisbetter.com/" + torneoService.generarCodigoAleatorioEnlace());
        torneo.setIdEstado(1);
        mav.addObject("torneo", torneo);
        return mav;
    }

    @RequestMapping(value = "/torneos/CrearTorneo", method = RequestMethod.POST)
    public ModelAndView createTorneo(@ModelAttribute("torneo") Torneo torneo, SessionStatus status) throws TorneoException {
        ModelAndView mav = new ModelAndView("torneos/ConsultarTorneos");
        Integer crear = torneoService.crear(torneo);
        List<Torneo> torneos = torneoService.obtenerTodos();
        CriterioBusqueda criterioBusqueda = new CriterioBusqueda();
        mav.addObject("criterioBusqueda", criterioBusqueda);
        mav.addObject("torneos", torneos);
        mav.addObject("mensajeOk", "Se creo el torneo " + torneo.getNombre() + " con id: " + crear);
        return mav;
    }

    // Temporal
    @RequestMapping("/torneos/ModificarTorneo")
    public ModelAndView modificarTorneo(@RequestParam("nombreTorneo") String nombreTorneo) {
        ModelAndView mav = new ModelAndView("torneos/ModificarTorneo");
        Torneo torneo = torneoService.buscarTorneoPorNombreEspefico(nombreTorneo);
        mav.addObject("torneo", torneo);
        return mav;
    }

    @InitBinder
    public void initBinder(WebDataBinder webDataBinder) {
        SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
        dateFormat.setLenient(false);
        webDataBinder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
    }
}
